#ifndef MEMBERS_H
#define MEMBERS_H

#include <QString>
#include "database.h"
//定义身份信息
const int kSupevisor = 1;
const int kOwner = 2;
const int kStaff = 3;
const int kVolunt = 4;

//定义性别标识
const QString kMale = "男";
const QString KFemale = "女";
//定义健康状态
const QString kHealth = "健康";
const QString kSuspected = "疑似";
const QString kDiagnosed = "确诊";

//个体信息
struct Individual {
  QString buidid;
  QString address;
  int ID;
  QString name;
  QString gender;
  int age;
  double temperature;
  QString state;
  QString connection;
};

//购物信息
struct BuyInfo {
  QString buildingid;
  QString address;
  QString ownername;
  QString Tel;
  QString goodsname;
  QString goodsnumber;
  QString ordertime;
  QString arrivetime;
  QString state;
};

//出入信息
struct IOinfo {
  Individual people;
  QString date;
  QString intime;
  QString outtime;
  QString buildid;
};

//业主类
class Owner {
 public:
  Owner();
  ~Owner();
  void GetID(const info& ID); //获得身份ID
  void AddMember(Individual *person); //增加成员
  void ModifyMember(int row, int column, QString newvalue); //更改成员信息<属性名，新值>
  void DeleteMember(QString name); //删除成员 <成员姓名>
  QList<QStringList>* GetAllMembers();  //获取成员信息

  void AddBuy(BuyInfo *buy);  //增加购物信息
  void DeleteBuy(QString name, QString ordertime); //删除购物信息
  QList<QStringList>* GetAllBuys();  //获取购物信息

 private:
  DataBase *db_; //指向数据库的指针
  Individual *Self_; //自身信息
  QList<QStringList> Buy_;  //存储自己的所有购物信息
  QList<QStringList> Fmember_;  //存储自己的所有家庭成员信息
};

//物业员工类
class Staff {
 public:
  Staff();
  ~Staff();
  void GetID(const info& ID); //获得身份ID
  virtual void AddIOinfo(IOinfo *IO); //增加出入信息
  void ModifyIOinfo(int row, int column, QString newvalue); //更改出入信息
  void DeleteIOinfo(QString date,QString tel,QString intime); //删除出入信息
  virtual QList<QStringList>* GetAllIOs();  //获取出入信息
  virtual QList<QStringList>* GetAllOwners();  //获取本楼栋业主信息
  virtual QList<QStringList>* GetAllResidents();  //获取本楼栋住户信息
 protected:
  DataBase *db_;  //指向数据库的指针
  Individual *Self_;  //自身信息
  QList<QStringList> Resident_; //所有本楼栋居民信息
  QList<QStringList> IO_; //所有本楼栋出入信息
  QList<QStringList> Owner_;  //所有本楼栋业主信息
};

//主管类
//主管类公有继承物业员工类，拥有其所有权限
class Supervisor: public Staff {
 public:
  void AddIOinfo(IOinfo *IO); //增加出入信息
  void AddOwner(Individual *person); //增加业主信息
  void ModifyOwner(int row, int column, QString newvalue); //修改业主信息
  void DeleteOwner(QString name); //删除业主信息和其所有家属
  void AddStaff(Individual *person); //增加员工信息
  void ModifyStaff(int row, int column, QString newvalue); //修改员工信息
  void DeleteStaff(QString name); //删除员工信息
  QList<QStringList>* GetAllIOs();  //获取出入信息
  QList<QStringList>* GetAllOwners();  //获取所有业主信息
  QList<QStringList>* GetAllStaffs();  //获取所有员工信息
 private:

  QList<QStringList> Staff_;  //所有员工信息
};

//志愿者类
class Volunteer {
 public:
  void ModifyBuyTime(QString arrivetime, int row);  //修改送达时间
  QList<QStringList>* GetArrived();  //获得已经送达的购物信息
  QList<QStringList>* GetUnArrived();  //获得未送达的购物信息
 private:
  DataBase *db_;  //数据库指针
  QList<QStringList> Arrive_; //所有已送达的购物信息
  QList<QStringList> UnArrive_; //所有未送达的购物信息
};

class Members
{
public:
  Members();
};

#endif // MEMBERS_H
